import cv2
import numpy as np

"""
    在opencv中，是可以进行图形绘制的，也就是你可以自己设计形状等，并添加logo文字到图像上
"""

# 准备画板(+255 实现白底)
img = np.zeros((500, 700, 3), np.uint8) + 255

# 1. 绘制直线
cv2.line(
    img,   # 画板
    (100, 100),   # 端点1
    (300, 300),   # 端点2
    (0, 0, 255),   # 颜色
    5,   # 线宽 单位是px，默认是1
    lineType=cv2.LINE_AA   # 线型，默认是cv2.LINE_8，_AA 是抗锯齿
)

# 2. 绘制矩形
cv2.rectangle(
    img,
    pt1=(100, 100),  # 左上角
    pt2=(300, 300),  # 右下角
    color=(0, 255, 0),
    thickness=-1,  # 线宽，-1 表示填充, 正数表示粗细
    lineType=cv2.LINE_AA
)

# 3. 绘制多边形 (只能绘制边框)
cv2.polylines(
    img,
    pts=[np.array([[100, 100], [200, 100], [200, 200], [100, 200]])],  # 多边形顶点坐标, 三维数组
    isClosed=True,  # 是否闭合
    color=(255, 0, 0),
    thickness=3,
    lineType=cv2.LINE_AA
)
# 绘制多边形并填充
cv2.fillPoly(
    img,
    pts=[np.array([[100, 100], [200, 100], [200, 200], [100, 200]])],
    color=(255, 0, 0),
    lineType=cv2.LINE_AA
)

# 4. 绘制椭圆
cv2.ellipse(
    img,
    center=(400, 400),  # 椭圆中心
    axes=(100, 50),  # 椭圆长轴和短轴
    angle=0,  # 旋转角度
    startAngle=0,  # 起始角度
    endAngle=360,  # 结束角度
    color=(0, 0, 255),
    thickness=-1,
    lineType=cv2.LINE_AA
)

# 5. 绘制圆
cv2.circle(
    img,
    center=(600, 400),  # 圆心
    radius=50,  # 半径
    color=(255, 255, 0),
    thickness=-1,
    lineType=cv2.LINE_AA
)

# 6. 文本标注
cv2.putText(
    img,
    text="Hello World",  # 文本
    org=(100, 400),  # 文本起始位置
    fontFace=cv2.FONT_HERSHEY_SIMPLEX,  # 字体
    fontScale=1,  # 字体大小
    color=(255, 0, 255),
    thickness=2,
    lineType=cv2.LINE_AA,
    bottomLeftOrigin=True  # 参数表示文本起始位置是否是左下角，默认是左上角，True表示左下角
)

cv2.imshow("line", img)
cv2.waitKey(0)